﻿/**
 * Create in 2012-4-1.
 */
package kit4j.common.collection;

/**
 * 自动增长的对象池接口。
 * 
 * @author MiniKnife
 * 
 * @param <T>
 *            对象池存储的对象类型
 */
public interface AotuIncrementObjectPool<T> extends ObjectPool<T> {
	
	/**
	 * @return 当前对象池允许的最大容量。
	 */
	public int getMaxCapacity();

	/**
	 * 设置当前对象池允许的最大容量。
	 * 
	 * @param maxCapacity
	 *            要设置的最大容量。如果为非正数，则视作无限大。
	 */
	public void setMaxCapacity(int maxCapacity);

	/**
	 * @return 当前对象池允许的最小容量。
	 */
	public int getMinCapacity();

	/**
	 * 设置当前对象池允许的最小容量。
	 * 
	 * @param minCapacity
	 *            要设置的最小容量。如果为负数，则视作0。
	 */
	public void setMinCapacity(int minCapacity);

	/**
	 * @return 当前对象池中的对象增长因子。
	 */
	public double getIncrementFactor();

	/**
	 * 设置当前对象池中的对象增长因子。如果对象池中当前未被取用的对象数量/当前容量超出增长因子的值，则对象池自动添加对象。
	 * 
	 * @param incrementFactor
	 *            要设置的增长因子(增长因子=未被取用的对象数量/当前容量)。
	 */
	public void setIncrementFactor(double incrementFactor);

	/**
	 * @return 对象池增量。
	 */
	public int getCapacityIncrement();

	/**
	 * 设置对象池增量。
	 * 
	 * @param capacityIncrement
	 *            要设置的增量，增量即当对象池中当前未被取用的对象数量/当前容量超出增长因子的值时自动添加的对象数量。
	 */
	public void setCapacityIncrement(int capacityIncrement);

}
